using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._NetworkDiagramTools._Configuration
{
    /// <summary>
    /// <para>Add Expand Container By Attribute Rule</para>
    /// <para>Adds a diagram rule to automatically expand container contents during diagram building based on an existing template. The containers to expand are filtered by attributes from a given container source class or object table.</para>
    /// <para>添加逻辑示意图规则，用于在基于现有模板构建逻辑示意图期间自动展开容器内容。要展开的容器按给定容器源类或对象表中的属性进行筛选。</para>
    /// </summary>    
    [DisplayName("Add Expand Container By Attribute Rule")]
    public class AddExpandContainerByAttributeRule : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AddExpandContainerByAttributeRule()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_utility_network">
        /// <para>Input Network</para>
        /// <para>The utility network or trace network containing the diagram template to modify.</para>
        /// <para>包含要修改的逻辑示意图模板的公共设施网络或追踪网络。</para>
        /// </param>
        /// <param name="_template_name">
        /// <para>Input Diagram Template</para>
        /// <para>The name of the diagram template to modify.</para>
        /// <para>要修改的逻辑示意图模板的名称。</para>
        /// </param>
        /// <param name="_is_active">
        /// <para>Active</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the rule will be active when generating and updating diagrams based on the specified template.
        ///   <bulletList>
        ///     <bullet_item>Checked—The added rule will become active during the generation and update of any diagrams based on the input template. This is the default.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The added rule will not become active during the generation or update of any diagrams based on the input template.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定在基于指定模板生成和更新关系图时，规则是否处于活动状态。
        ///   <bulletList>
        ///     <bullet_item>选中 - 在基于输入模板生成和更新任何逻辑示意图期间，添加的规则将变为活动状态。这是默认设置。 </bullet_item><para/>
        ///     <bullet_item>未选中 - 在基于输入模板生成或更新任何逻辑示意图期间，添加的规则将不会变为活动状态。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_containers_visibility">
        /// <para>Keep containers visible</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the containers stay visible after they are expanded.
        ///   <bulletList>
        ///     <bullet_item>Checked—The containers will stay visible after they are expanded. This is the default.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The containers will be hidden after they are expanded.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定容器在展开后是否保持可见。
        ///   <bulletList>
        ///     <bullet_item>选中 - 容器在展开后将保持可见。这是默认设置。 </bullet_item><para/>
        ///     <bullet_item>未选中 - 容器展开后将被隐藏。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_container_source">
        /// <para>Container Source</para>
        /// <para>The container source class or object table that references the containers to be expanded.</para>
        /// <para>引用要展开的容器的容器源类或对象表。</para>
        /// </param>
        public AddExpandContainerByAttributeRule(object _in_utility_network, object _template_name, _is_active_value _is_active, _containers_visibility_value _containers_visibility, object _container_source)
        {
            this._in_utility_network = _in_utility_network;
            this._template_name = _template_name;
            this._is_active = _is_active;
            this._containers_visibility = _containers_visibility;
            this._container_source = _container_source;
        }
        public override string ToolboxName => "Network Diagram Tools";

        public override string ToolName => "Add Expand Container By Attribute Rule";

        public override string CallName => "nd.AddExpandContainerByAttributeRule";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_utility_network, _template_name, _is_active.GetGPValue(), _containers_visibility.GetGPValue(), _container_source, _where_clause, _description, _out_utility_network, _out_template_name];

        /// <summary>
        /// <para>Input Network</para>
        /// <para>The utility network or trace network containing the diagram template to modify.</para>
        /// <para>包含要修改的逻辑示意图模板的公共设施网络或追踪网络。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Network")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_utility_network { get; set; }


        /// <summary>
        /// <para>Input Diagram Template</para>
        /// <para>The name of the diagram template to modify.</para>
        /// <para>要修改的逻辑示意图模板的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Diagram Template")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _template_name { get; set; }


        /// <summary>
        /// <para>Active</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the rule will be active when generating and updating diagrams based on the specified template.
        ///   <bulletList>
        ///     <bullet_item>Checked—The added rule will become active during the generation and update of any diagrams based on the input template. This is the default.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The added rule will not become active during the generation or update of any diagrams based on the input template.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定在基于指定模板生成和更新关系图时，规则是否处于活动状态。
        ///   <bulletList>
        ///     <bullet_item>选中 - 在基于输入模板生成和更新任何逻辑示意图期间，添加的规则将变为活动状态。这是默认设置。 </bullet_item><para/>
        ///     <bullet_item>未选中 - 在基于输入模板生成或更新任何逻辑示意图期间，添加的规则将不会变为活动状态。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Active")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _is_active_value _is_active { get; set; }

        public enum _is_active_value
        {
            /// <summary>
            /// <para>ACTIVE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ACTIVE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>INACTIVE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INACTIVE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Keep containers visible</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the containers stay visible after they are expanded.
        ///   <bulletList>
        ///     <bullet_item>Checked—The containers will stay visible after they are expanded. This is the default.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The containers will be hidden after they are expanded.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定容器在展开后是否保持可见。
        ///   <bulletList>
        ///     <bullet_item>选中 - 容器在展开后将保持可见。这是默认设置。 </bullet_item><para/>
        ///     <bullet_item>未选中 - 容器展开后将被隐藏。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Keep containers visible")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _containers_visibility_value _containers_visibility { get; set; }

        public enum _containers_visibility_value
        {
            /// <summary>
            /// <para>KEEP_VISIBLE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("KEEP_VISIBLE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>HIDE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("HIDE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Container Source</para>
        /// <para>The container source class or object table that references the containers to be expanded.</para>
        /// <para>引用要展开的容器的容器源类或对象表。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Container Source")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _container_source { get; set; }


        /// <summary>
        /// <para>Expression</para>
        /// <para>An SQL expression used to select the subset of containers in the container source class or object table that will be expanded in the generated diagrams. For more information on SQL syntax, see the SQL reference for query expressions used in ArcGIS help topic.</para>
        /// <para>一个 SQL 表达式，用于选择将在生成的关系图中展开的容器源类或对象表中的容器子集。有关 SQL 语法的详细信息，请参阅 ArcGIS 帮助中使用的查询表达式的 SQL 参考主题。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Expression")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _where_clause { get; set; } = null;


        /// <summary>
        /// <para>Description</para>
        /// <para>The description of the rule.</para>
        /// <para>规则的说明。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Description")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _description { get; set; } = null;


        /// <summary>
        /// <para>Output Network</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Network")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_utility_network { get; set; }


        /// <summary>
        /// <para>Output Diagram Template</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Diagram Template")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_template_name { get; set; }


        public AddExpandContainerByAttributeRule SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}